SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[LIQGarantiaDec1104]
@Agente INT,
@Servicio INT,
@Plaza INT,
@Resultado DECIMAL(18,4) OUTPUT,
@idLiquidacion INT,
@DiasALiquidar INT,
@DiasDelPeriodo INT,
@Desde DATETIME,
@Hasta DATETIME
AS 

SET NOCOUNT ON
SET DATEFORMAT DMY 


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- REGISTRO DE ACTUALIZACIONES
-- 18/11/2005 - Se agregaron parametros @Desde y @Hasta para manejo de Fechas en Titulares y Suplentes
-- 09/07/2006 - Los parametros se obtienen de la funcion fnObtenerValorDeParametro con la fecha que corresponda.
-- 18/03/2008 - Se agrego al calculo el Acuerdo Paritaria 19/08
-- 18/11/2008 - Se Cambió como tomaba la antiguedad, ahora se se toman los años calculados en LIQAntiguedad en el campo DiasLiquidadados
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-- Para parametros
DECLARE @ImporteEstimulo2088 DECIMAL(18,4)
DECLARE @ImporteEstimulo806 DECIMAL(18,4)

DECLARE @ImporteAcuerdo DECIMAL(18,4)

DECLARE @PorcentajeJubilatorio DECIMAL(18,4)
DECLARE @PorcentajeObraSocial DECIMAL(18,4)
DECLARE @PorcentajePresentismo DECIMAL(18,4)
DECLARE @PorcentajeConduccion DECIMAL(18,4)
DECLARE @PorcentajeART DECIMAL(18,4)
DECLARE @ImporteFijoART DECIMAL(18,4)
DECLARE @ValorSuplemento DECIMAL(18,4)
DECLARE @CabeceraDeLiquidacion INT 
-- 
-- Para Valores del Servicio
DECLARE @MaximaGarantia DECIMAL(18,4)
DECLARE @SueldoBasico DECIMAL(18,4)
DECLARE @Antiguedad DECIMAL(18,4)
DECLARE @Presentismo DECIMAL(18,4)
DECLARE @Conduccion DECIMAL(18,4)
DECLARE @Estimulo2088 DECIMAL(18,4)
DECLARE @Estimulo806 DECIMAL(18,4)

DECLARE @EstimuloAcuerdo DECIMAL(18,4)

DECLARE @Suplemento DECIMAL(18,4)
DECLARE @AporteJubilatorio DECIMAL(18,4)
DECLARE @AporteObraSocial DECIMAL(18,4)
DECLARE @AporteART DECIMAL(18,4)
--
DECLARE @Afiliacion INT
DECLARE @horas INT
DECLARE @RegimenSalarial INT
DECLARE @Organizacion INT
DECLARE @SituacionRevista INT
DECLARE @NroError INT
DECLARE @PorcentajeSubsidio DECIMAL(18,4)
DECLARE @Anios INT
DECLARE @Meses INT
DECLARE @BonificacionPorAntiguedad DECIMAL(18,4)
DECLARE @OrganizacionLiquidadora INT
DECLARE @SubOrganizacion INT
DECLARE @DiasTrabajados INT
DECLARE @PorcentajeDeEstimulo DECIMAL(18,4)
DECLARE @CargoSalarial INT
DECLARE @ProporcionalMaximaGarantia DECIMAL(18,4)
DECLARE @Garantia DECIMAL(18,4)
DECLARE @PuntosDelCargo INT
DECLARE @TotalRemunerativo DECIMAL(18,4)
DECLARE @Aguinaldo DECIMAL(18,4)
DECLARE @ValorPuntoDocente  DECIMAL(18,4)
DECLARE @PuntosSueldoBase INT 
DECLARE @SueldoBasicoBase DECIMAL(18,4)
DECLARE @PresentismoBase DECIMAL(18,4)
DECLARE @AportesJubilatoriosBase DECIMAL(18,4)
DECLARE @AportesObraSocialBase DECIMAL(18,4)
DECLARE @AportesARTBase DECIMAL(18,4)
DECLARE @TotalRemunerativoBase DECIMAL(18,4)
DECLARE @SueldoNetoBase DECIMAL(18,4)
DECLARE @TopeGarantiaBase DECIMAL (18,4)

SET DATEFORMAT DMY

--------------------------------------------
-- Extraccion de Parámetros
--------------------------------------------

SELECT @MaximaGarantia = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImporteGarantiaDec1104', @Hasta))
SELECT @ImporteEstimulo2088 = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ValorEstimuloLey2088', @Hasta))
SELECT @ImporteEstimulo806 = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ValorEstimuloDecreto806', @Hasta))

SELECT @ImporteAcuerdo =  CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImporteAcuerdoParitaria19/08', @Hasta))

SELECT @ValorSuplemento = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ValorTopeSuplementoNoBonificable', @Hasta))
SELECT @PorcentajeJubilatorio = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%AporteJubilatorio', @Hasta))
SELECT @PorcentajeObraSocial = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%AporteObraSocial', @Hasta))
SELECT @PorcentajePresentismo = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%PresentismoTotal', @Hasta))
SELECT @PorcentajeConduccion = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%BonificacionPorConduccion', @Hasta))
SELECT @PorcentajeART = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%SubsidioART', @Hasta))
SELECT @ImporteFijoART = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImporteFijoART', @Hasta))
SELECT @ValorPuntoDocente = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ValorPuntoDocente', @Hasta))

-- Calcular Sueldo para Maestro de Grado sin Antiguedad
SELECT @PuntosSueldoBase = 100
SELECT @SueldoBasicoBase = @PuntosSueldoBase*@ValorPuntoDocente
SELECT @PresentismoBase = (@SueldoBasicoBase*@PorcentajePresentismo)/100

SELECT @TotalRemunerativoBase = @SueldoBasicoBase + @ValorSuplemento + @ImporteEstimulo2088 + @ImporteAcuerdo

SELECT @AportesJubilatoriosBase = (@TotalRemunerativoBase * @PorcentajeJubilatorio)/100
SELECT @AportesObraSocialBase = (@TotalRemunerativoBase *  @PorcentajeObraSocial)/100
SELECT @AportesARTBase = @ImporteFijoART + ((@TotalRemunerativoBase * @PorcentajeART) / 100)
SELECT @SueldoNetoBase = (@TotalRemunerativoBase + @PresentismoBase + @ImporteEstimulo806) - (@AportesJubilatoriosBase + @AportesObraSocialBase + @AportesARTBase)
SELECT @TopeGarantiaBase = @MaximaGarantia - @SueldoNetoBase

-- Ejemplo  (SueldoNeto Maestro de Grado sin Antiguedad con Presentismo)

SELECT @Afiliacion = idAfiliacion FROM tb_Afiliaciones WHERE idAgente = @Agente
SELECT @SubOrganizacion = SubOrganizacion FROM tb_Plazas WHERE idPlaza = @Plaza
SELECT @Organizacion = ubicacionOrig, @SituacionRevista = SituacionRevista FROM tb_ServiciosAgentes WHERE idservicioAgente =  @Servicio

-- Regimen Salarial del Cargo que tiene el servicio
SELECT @RegimenSalarial = C.RegimenSalarial, @Horas = Horas, @CargoSalarial = CargoSalarial, @PuntosDelCargo = Puntos
FROM tb_ServiciosAgentes INNER JOIN tb_CargosSalariales C ON idCargo = CargoSalarial
	WHERE idServicioAgente = @Servicio

-- Dias Trabajados
SELECT @DiasTrabajados = MontoHaberes FROM tb_RegistroDeLiquidaciones 
	WHERE  Liquidacion = @idLiquidacion AND  Servicio = @Servicio AND Concepto = 29  

--Sueldo Básico liquidado para el servicio (ya está proporcionado a los días trabajados!)
SELECT @SueldoBasico = MontoHaberes FROM tb_RegistroDeLiquidaciones 
	WHERE Liquidacion = @idLiquidacion AND Servicio = @Servicio AND Concepto = 4

-- Aguinaldo liquidado para el servicio (ya está proporcionado a los días trabajados!)
SELECT @Aguinaldo  = MontoHaberes FROM tb_RegistroDeLiquidaciones 
	WHERE Liquidacion = @idLiquidacion AND Servicio = @Servicio AND Concepto = 32
IF @Aguinaldo IS NULL
	SELECT @Aguinaldo = 0

IF @SueldoBasico > 0
BEGIN
	-- Suplemento No Bonificable (No se saca de Registro de Liquidaciones porque es un valor tope como el estímulo)
	IF @RegimenSalarial = 12 -- (Si es por cargo)
		SELECT @Suplemento = @ValorSuplemento * (CASE WHEN Puntos > 100 THEN 100 ELSE Puntos END) / 100 FROM tb_CargosSalariales WHERE idCargo = @CargoSalarial
	ELSE
	BEGIN
		IF @CargoSalarial In (2901, 3001)
			SELECT @Suplemento = (CASE WHEN @Horas > 15 THEN 15 ELSE @Horas END * @ValorSuplemento) / 15

		IF @CargoSalarial In (4001)
			SELECT @Suplemento = (CASE WHEN @Horas > 12 THEN 12 ELSE @Horas END * @ValorSuplemento) / 12	
	END	
	IF @Suplemento IS NULL 
                  SELECT @Suplemento = 0

	-- Se proporciona el Suplemento a los días trabajados.
	SELECT @Suplemento = (@Suplemento * @DiasTrabajados) / @DiasDelPeriodo


	-- Estimulo Ley 2088
	SELECT @PorcentajeDeEstimulo = Porcentaje FROM  tb_PorcentajesDeEstimulo WHERE idCargo = @CargoSalarial

	IF @PorcentajeDeEstimulo IS NULL
		SELECT @Estimulo2088 = @ImporteEstimulo2088
	ELSE	
		SELECT @Estimulo2088 = (@ImporteEstimulo2088 * @PorcentajeDeEstimulo) / 100

	IF @CargoSalarial IN (2901, 3001)
		SELECT @Estimulo2088 = (@Horas * @ImporteEstimulo2088) / 15

	IF @CargoSalarial IN (4001)
		SELECT @Estimulo2088 = (@Horas * @ImporteEstimulo2088) / 12	

	-- Se proporciona el Suplemento a los días trabajados.
	SELECT @Estimulo2088 = (@Estimulo2088 * @DiasTrabajados) / @DiasDelPeriodo


	-- Acuerdo Paritaria 19/08
	SELECT @PorcentajeDeEstimulo = Porcentaje FROM  tb_PorcentajesDeEstimulo WHERE idCargo = @CargoSalarial

	IF @PorcentajeDeEstimulo IS NULL
		SELECT @EstimuloAcuerdo = @ImporteAcuerdo
	ELSE	
		SELECT @EstimuloAcuerdo = (@ImporteAcuerdo * @PorcentajeDeEstimulo) / 100

	IF @CargoSalarial IN (2901, 3001)
		SELECT @EstimuloAcuerdo = (@Horas * @ImporteAcuerdo) / 15

	IF @CargoSalarial IN (4001)
		SELECT @EstimuloAcuerdo = (@Horas * @ImporteAcuerdo) / 12	

	-- Se proporciona el Suplemento a los días trabajados.
	SELECT @EstimuloAcuerdo = (@EstimuloAcuerdo * @DiasTrabajados) / @DiasDelPeriodo


	--Antiguedad liquidada para el Servicio.

/*
	SELECT @Antiguedad = MontoHaberes FROM tb_RegistroDeLiquidaciones 
		WHERE Liquidacion = @idLiquidacion AND Servicio = @Servicio AND Concepto = 7
*/
---lo
	SELECT @Anios = DiasLiquidados FROM tb_RegistroDeLiquidaciones 
		WHERE Liquidacion = @idLiquidacion AND Servicio = @Servicio AND Concepto = 7
		
	SELECT @Antiguedad = ((@SueldoBasico +@Estimulo2088)* Porcentaje)/ 100  
	FROM tb_PorcentajesDeAntiguedades
	WHERE @Anios >=  AniosDesde AND @Anios < AniosHasta
	
	IF @Antiguedad IS NULL
		SELECT @Antiguedad = 0

	-- Calculamos el Total Remunerativo
	SELECT @TotalRemunerativo = @SueldoBasico + @Antiguedad + @Suplemento + @Estimulo2088 + @EstimuloAcuerdo

	-- Presentismo o Conduccion. Según Corresponda.
	-- Si se le pagó por Bonificacion por conducción Corresponde por Conduccion, sino por Presentismo.
	SELECT @Conduccion = 0 
	SELECT @Presentismo = 0 
	IF EXISTS(SELECT * FROM tb_RegistroDeLiquidaciones 
		WHERE Liquidacion = @idLiquidacion AND Servicio = @Servicio AND Concepto = 8 AND MontoHaberes > 0)
	BEGIN
		SELECT @Conduccion = (@SueldoBasico * @PorcentajeConduccion) / 100 
		-- Bonificacion Por Conduccion es parte del Remunerativo
		SELECT @TotalRemunerativo = @TotalRemunerativo + @Conduccion
	END
	ELSE
		SELECT @Presentismo = (@SueldoBasico * @PorcentajePresentismo) / 100


	--Aporte Jubilatorio
	SELECT @AporteJubilatorio = (@TotalRemunerativo * @PorcentajeJubilatorio) / 100

	--Aporte Obra Social
	SELECT @AporteObraSocial = (@TotalRemunerativo * @PorcentajeObraSocial) / 100

	--ART
	SELECT @AporteART = @ImporteFijoART + (@TotalRemunerativo * @PorcentajeART) / 100

	-- Estimulo Decreto 806
	IF @PorcentajeDeEstimulo IS NULL
		SELECT @Estimulo806 = @ImporteEstimulo806
	ELSE	
		SELECT @Estimulo806 = (@ImporteEstimulo806 * @PorcentajeDeEstimulo) / 100

	IF @CargoSalarial In (2901, 3001)
		SELECT @Estimulo806 = (@Horas * @ImporteEstimulo806) / 15

	IF @CargoSalarial In (4001)
		SELECT @Estimulo806 = (@Horas * @ImporteEstimulo806) / 12	

	-- Se proporciona el Suplemento a los días trabajados.
	SELECT @Estimulo806 = (@Estimulo806 * @DiasTrabajados) / @DiasDelPeriodo

	--El Proporcional de los 814 en función del cargo (LOS 100 PUNTOS PUEDEN PASAR COMO PARAMETRO!)
	IF @PuntosDelCargo > 100
		SELECT @PuntosDelCargo = 100
	
	-- Calculo mal en el Caso de los que tienen Bonificacion por Conduccion por eso se quito
	--IF @Conduccion >0 
	--	SELECT @MaximaGarantia =  @SueldoNetoBase 
	
	IF @RegimenSalarial = 12	    BEGIN
		SELECT @ProporcionalMaximaGarantia = (@MaximaGarantia *  @PuntosDelCargo) / 100
		SELECT @TopeGarantiaBase = (@TopeGarantiaBase  * @PuntosDelCargo) / 100
	    END 
	ELSE	
  	    BEGIN
		IF @CargoSalarial In (2901, 3001)
    		     BEGIN 
			SELECT @ProporcionalMaximaGarantia = (CASE WHEN @Horas > 15 THEN 15 ELSE @Horas END  * @MaximaGarantia) / 15
			SELECT @TopeGarantiaBase = (CASE WHEN @Horas > 15 THEN 15 ELSE @Horas END  * @TopeGarantiaBase) / 15
		     END 	
		IF @CargoSalarial In (4001)
  		     BEGIN 
			SELECT @ProporcionalMaximaGarantia = (CASE WHEN @Horas > 12 THEN 12 ELSE @Horas END * @MaximaGarantia) / 12	
			SELECT @TopeGarantiaBase = (CASE WHEN @Horas > 12 THEN 12 ELSE @Horas END * @TopeGarantiaBase) / 12	
		     END 
	   END

	-- Se proporciona el Suplemento a los días trabajados.
	SELECT @ProporcionalMaximaGarantia = (@ProporcionalMaximaGarantia * @DiasTrabajados) / @DiasDelPeriodo

              
	SELECT @Garantia = @ProporcionalMaximaGarantia - 
		(@SueldoBasico + @Antiguedad + @Presentismo + @Conduccion + @Estimulo806 + @Estimulo2088 + @EstimuloAcuerdo + @Suplemento - @AporteJubilatorio - @AporteObraSocial - @AporteART)

	IF @Garantia < 0
		SELECT @Garantia = 0
	ELSE
	     BEGIN
		IF @Conduccion >0 
		      IF @Garantia > @TopeGarantiaBase
			SELECT @Garantia = @TopeGarantiaBase 
	    END 

END
ELSE
	SELECT @Garantia = 0


INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, SubOrganizacion)
VALUES (null, @Afiliacion, @Agente, null, 1, null, 38, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @Garantia, @Organizacion, null, @Servicio, @SituacionRevista, @SubOrganizacion)

SELECT @NroError = @@ERROR

IF @NroError <> 0
  BEGIN 
	SELECT @CabeceraDeLiquidacion = IdCabeceraLiquidacion FROM tb_Liquidaciones WHERE IdLiquidacion = @IdLiquidacion

	 INSERT INTO tb_ErroresLiquidacion (Agente, Concepto, Diagnostico, Fecha, Liquidacion, Organizacion, Servicio, CabeceraDeLiquidacion, NumeroDeError) VALUES
	(@Agente, 38, CONVERT(VARCHAR,@NroError), GETDATE(), @idLiquidacion, @Organizacion, @Servicio, @CabeceraDeLiquidacion, @NroError)
  END
GO
